[iOS 11] 画面の録画を検知する
はじめに
こんにちは。モバイルアプリサービス部の平屋です。
iOS 11には画面収録という機能が追加されており、iPhone単体で画面の録画ができます。
本記事では画面の録画をアプリから検知する方法を紹介します。
検証環境
- Mac
- macOS High Sierra 10.13
- Xcode Version 9.2 (9C40b)
- iPhone X
- iOS 11.2 (15B202)
実装
録画中かどうかを判別する
iOS 11でUIScreenに追加されたisCaptured
プロパティを使用すれば、録画中かどうかを判別できます。
self.label.text = UIScreen.main.isCaptured ? "キャプチャされています!" : "キャプチャされていません!"
録画の開始/停止を検知する
iOS 11で追加されたUIScreenCapturedDidChange
通知を購読すれば、録画の開始/停止を検知できます。
NotificationCenter.default.addObserver(forName: .UIScreenCapturedDidChange, object: nil, queue: nil) { _ in self.label.text = UIScreen.main.isCaptured ? "キャプチャされています!" : "キャプチャされていません!" }
動作結果
サンプルアプリを起動します。
iOS 11の画面収録を使用した場合
コントロールセンター上の画面収録ボタンをタップして録画を開始します。
録画開始すると、isCaptured
プロパティの値がtrue
になります。
録画停止すると、isCaptured
プロパティの値がfalse
になります。
QuickTime Playerを使用した場合
iPhoneとMacをLightningケーブルで繋ぎ、QuickTime PlayerでiPhoneの画面を表示した場合もisCaptured
プロパティの値がtrue
になりました。
さいごに
本記事では画面の録画をアプリから検知する方法を紹介しました。
録画検知の用途の例として、Technical Q&A QA1970 では、以下のようなケースが挙げられています。
- ビデオ再生アプリで、画面録画中は再生を止めたい場合
今回解説したサンプルコードは以下のリポジトリで公開しています。